package com.sugon.modules.device.service;

import com.sugon.entity.DevMaintenRepairEntity;
import com.sugon.entity.DevMaintenThirdpartyCbEntity;
import com.sugon.entity.DevMaintenWorkEntity;
import com.sugon.entity.DevRepairRecordEntity;
import com.sugon.modules.device.model.vo.DevRepairRecordVO;

import java.util.List;

/**
 * @author ： YuXD
 * @description： 设备维修业务Manager
 * @date ： 2020-08-13 23:02
 * @version: 1.0
 */
public interface IDeviceRepairManager {

    /**
     * 删除工单，做三个事情：
     * 1、删除维修工单
     * 2、删除维修记录
     * 3、删除换件记录
     * 4、删除制定的预防措施
     * 5、删除设备维护计划
     * 6、删除现场照片
     *
     * @param ticketId
     * @return
     */
    void deleteTicket(String ticketId);

    /**
     * userId 催办工单ticketId
     *
     * @param ticketId 维修工单ID
     * @param userId   用户ID
     * @return
     */
    boolean urge(String ticketId, String userId);

    /**
     * 设备故障报修
     *
     * @param devMaintenWork 报修详情
     * @return
     */
    boolean callRepair(DevMaintenWorkEntity devMaintenWork);

    /**
     * 设备故障报修
     *
     * @param callRepairParam 报修参数
     * @return
     */
    boolean callRepair(DevRepairRecordEntity callRepairParam);

    /**
     * 补录设备维修记录
     *
     * @param devRepairRecord 设备维修记录
     * @return
     */
    DevMaintenWorkEntity doAdditionalRecording(DevMaintenRepairEntity devRepairRecord);

    /**
     * 补录设备维修记录
     *
     * @param repairRecord 设备维修记录
     * @return
     */
    DevRepairRecordEntity doAdditionalRecording(DevRepairRecordEntity repairRecord);

    /**
     * 维修工确认开始维修工单
     * 1、更新派工单
     * 2、更新维修工单状态
     * 3、开启30分钟或者120分钟倒计时
     *
     * @param devRepairWork 设备维修工单
     * @return
     */
    boolean confirmRepair(DevRepairRecordEntity devRepairWork);

    /**
     * 维修工-维修完成,需要做以下事项
     * 更新维修记录中
     * 更新工单
     * 删除倒计时
     * 发送消息给生产班组长
     *
     * @param repairTicket 工单维修记录信息
     * @return
     */
    boolean completeRepair(DevRepairRecordEntity repairTicket);

    /**
     * 完善维修记录
     *
     * @param repairRecordParam 工单维修记录信息
     * @return
     */
    boolean perfectRepairRecord(DevRepairRecordEntity repairRecordParam);

    /**
     * 完善维修记录
     *
     * @param repairRecordParam 工单维修记录信息
     * @return
     */
    boolean perfectRepairRecord(DevMaintenRepairEntity repairRecordParam);

    /**
     * 当前处理人员不能在规定时间内处理完，上报到上一级申请协助处理
     *
     * @param repairTicket   工单
     * @param assistPersonId 协助人员ID
     * @return
     */
    boolean report(DevMaintenWorkEntity repairTicket, String assistPersonId);

    /**
     * 加载设备维修记录，包含更换的备件信息
     *
     * @param devId 设备ID
     * @return
     */
    List<DevRepairRecordVO> loadDevRepairRecord(String devId);

    /**
     * 处理thinwork设备维修过程回调
     *
     * @param callbackData 回调数据
     * @return
     */
    DevRepairRecordEntity handThirdPartyCallback(DevMaintenThirdpartyCbEntity callbackData);

}
